class AlbumMetadata:
	"""
	Generic data interface for taggers to read from
	This loosely corresponds to directory level info
	"""

	def getTracks(self):
		#return an array of TrackMetadata objects
		raise NotImplementedError
		

	def getAlbumName(self):
		raise NotImplementedError

	def getAsin(self):
		raise NotImplementedError

	def getDiscogs(self):
		raise NotImplementedError

	def getAlbumArtistSort(self):
		#TODO:
		return self.getAlbumArtist()

	def getAlbumArtist(self):
		raise NotImplementedError

	def getReleaseType(self):
		raise NotImplementedError

	def getAlbumId(self):
		raise NotImplementedError

	def getReleaseStatus(self):
		raise NotImplementedError

	def getTotalTracs(self):
		raise NotImplementedError

	def getAlbumArtistId(self):
		raise NotImplementedError

	def getDate(self):
		raise NotImplementedError

	def getDiscId(self):
		raise NotImplementedError

	def getCompilation(self):
		raise NotImplementedError


class TrackMetadata:
	"""
	Generic data interface for taggers to read from
	This loosely corresponds to file level info
	"""
	def __init__(self, album):
		self.album = album

	def getAlbum(self):
		return self.album

	def getArtistId(self):
		raise NotImplementedError

	def getTrackId(self):
		raise NotImplementedError

	def getTitle(self):
		raise NotImplementedError

	def getArtist(self):
		raise NotImplementedError

	def getArtistSort(self):
		#TODO
		return self.getArtistSort()

	def getTrackNumber(self):
		raise NotImplementedError

class StoredAlbumMetadata:
	def __init__(self):
			self.tracks = {}
			self.totalTracks = None
			self.albumName = None
			self.albumId = None
			self.asin = None
			self.discogs = None
			self.albumArtist=None
			self.diskId = None
			#struct['ALBUMARTISTSORT']=None
			#struct['MUSICBRAINZ_ALBUMID'] = None
			self.releaseStatus = None
			#struct['RELEASETYPE'] = None
			self.albumArtistId = None
			self.date = None
			self.compilation = None
			
	def getTracks(self):
		return self.tracks

	def getAlbumName(self):
		return self.albumName

	def getAsin(self):
		return self.asin

	def getDiscogs(self):
		return self.discogs

	def getAlbumArtistSort(self):
		return self.getAlbumArtist()

	def getAlbumArtist(self):
		return self.albumArtist

	def getReleaseType(self):
		return NotImplementedError

	def getAlbumId(self):
		return self.albumId

	def getReleaseStatus(self):
		return self.releaseStatus

	def getTotalTracs(self):
		return self.totalTracks

	def getAlbumArtistId(self):
		return self.albumArtistId

	def getDate(self):
		return self.date

	def getDiscId(self):
		return self.diskId

	def getCompilation(self):
		return self.compilation
